/**
 * @description 异常，用来指明参数值是必须项
 * @param message {string} 错误消息
 * @private
 */
function _error(message) {
  throw new Error(message);
}

/**
 * 过滤数组中的元素
 * @param {array} arr 被过滤的数组
 * @param {string} filed 被过滤的字段名称
 * @param {string | number | boolean} val 被过滤的字段值，只会返回指定字段符合该值的元素
 * @returns {*} 返回被过滤后的数组
 */
export function filterArr(arr, filed, val) {
  return Array.isArray(arr) && filed && (val + '')
    ? arr.filter(item => item[filed] === val)
    : [];
}

/**
 * @description 根据指定字段获取数组的对象
 * @param {array} arr 被查找的数组
 * @param {string} filedKey 根据该字段进行查找
 * @param {string} filedVal 根据该字段的值进行查找
 * @param {string} val 返回的字段值，可以为空
 */
export function searchByFiled(arr, filedKey, filedVal, val) {
  if (Array.isArray(arr) && arr.length) {
    const findEl = arr.find(item => item[filedKey] == filedVal);
    if (findEl && Object.keys(findEl).length) { return val ? findEl[val.trim()] : findEl; }
  }
  return void 0;
}

/**
 * @description 删除方法
 * @param {array} arr 被删除的数组
 * @param {*} value 需要删除的值
 * @param {string} field 需要删除的字段【可选】
 * @returns {boolean} 删除结果
 */
export function remove(arr, value = _error('需要删除的值不能为空'), field) {
  if (Array.isArray(arr) && arr.length) {
    const index = field ? arr.findIndex(item => item[field] == value) : arr.indexOf(value);
    index !== -1 && arr.splice(index, 1);
    return true;
  }
  return false;
}
